package com.hospital.register.core.repository;

import com.hospital.register.dto.core.common.ScheduleDaysDto;
import com.hospital.register.dto.core.common.SchedulePageDto;
import com.hospital.register.dto.core.api.ScheduleRemoveDto;
import com.hospital.register.model.core.Schedule;
import com.hospital.register.vo.core.common.ScheduleDaysVo;
import com.hospital.register.vo.core.common.ScheduleQueryVo;
import com.hospital.register.vo.order.OrderMessageVo;
import org.springframework.data.domain.Page;

/**
 * 访问排班数据
 *
 * @author 刘逸晖
 */
public interface ScheduleRepository {

    /**
     * 查询指定排班数据是否存在
     *
     * @param hoscode       所属医院的编号
     * @param hosScheduleId 排班的 id
     * @return 是否存在
     */
    boolean existed(String hoscode, String hosScheduleId);

    /**
     * 新增排班
     *
     * @param schedule 排班数据
     * @return 是否新增成功
     */
    boolean insert(Schedule schedule);

    /**
     * 更新排班数据
     * 根据医院自己的排班主见更新
     *
     * @param schedule 新数据+排班主见
     * @return 是否更新成功
     */
    boolean update(Schedule schedule);

    /**
     * 分页查询排班数据
     *
     * @param dto 条件
     * @return 结果
     */
    Page<ScheduleQueryVo> findPage(SchedulePageDto dto);

    /**
     * 删除排班
     *
     * @param dto 排班信息
     * @return 是否删除成功
     */
    boolean remove(ScheduleRemoveDto dto);

    /**
     * 查询指定科室下是否存在上未执行的排班
     *
     * @param hoscode 医院编号
     * @param depcode 科室编号
     * @return 是否存在上未执行的排班
     */
    boolean existInFuture(String hoscode, String depcode);

    /**
     * 统计某几天的排班数据，分页显示
     *
     * @param conditions 条件
     * @return 统计数据
     */
    ScheduleDaysVo findDataOfDays(ScheduleDaysDto conditions);

    /**
     * 根据 id 查询排班
     *
     * @param id 排班 的 id
     * @return 排班数据
     */
    ScheduleQueryVo findById(String id);

    /**
     * 根据 id 更新可预约数和剩余预约数
     * @param order 挂号订单
     * @return 更新的记录数
     */
    boolean updateNumberById(OrderMessageVo order);

}
